// tree_show 控制显示隐藏 
// press_sign 默认 1  当点击了加号后 变成2   如果是2 就可以不用掉接口展示数据 （）
// deep 代树

let globe_gldi = "";
//data 是数据 | tapdata 点击的数据  | operate  del 删除  add 添加
const recursionFnTow = (data,tapdata,operate,sel_subscript,num=0)=>{
	// sel_subscript [1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0]
	// 使用map遍历,生成新的数组
	data = data.map((item,index) => {
		if(tapdata.id==item.id){
			// console.info("找到了要操作的那个！",index);
			if(operate=='edit'){
				item = tapdata;
			}
		}
		if(item.child && sel_subscript[num] == index){
			num++;
			item.child = recursionFnTow(item.child,tapdata,operate,sel_subscript,num);
			
		}
		return item;
	})
	return data
	
}


//指定某个数据下面的数据 全部 显示或 隐藏
const recursionFnThree = (data,tapdata,operate,val,isset)=>{//tapdata要操作的数据
	// 使用map遍历,生成新的数组 //val  true 展示  false 折叠
	data = data.map((item,index) => {
		if(isset){
			item.tree_show = val;
		}
		console.info(tapdata,item);
		if(tapdata.id==item.id){
			// console.info("找到了要操作的那个！",item);
			if(operate=='edit'){
				item.press_sign = val?1:2;
				if(item.child){
					item.child = recursionFnThree(item.child,tapdata,operate,val,true)
				}
			}
		}else if(item.child && !isset){
			item.child = recursionFnThree(item.child,tapdata,operate,val,false)
		}
		return item;
	})
	return data
}

import {familyTreeList} from "@/utils/api/zupu.js"
import { type } from "os";
const state ={
	showpup:false,
	openpup_params:{},
	treeData:[],
	sel_subscript:[],//操作数据的下标
	algebra:0,//当前树状图最深的代数
	item_active:0,//高亮显示的 选中id
	tree_scrolltop:0,//页面滑动高度
	
	
	lv_count: {l1_count:0,l2_count:0,l3_count:0,l4_count:0},//每一代有多少人
	
	tap_more_item:{},//操作的节点数据
	
	
}

//全部显示数据 设置为 展示 显示
const forData = function(data){
	data = data.map(item=>{
		item.tree_show = true;
		item.press_sign = 1;//设置默认值
		if(item.child){
			item.child = forData(item.child)
		}
		return item;
	})
	return data
}

//控制只显示4代 后面的隐藏  第一次调用
var l1_count= 0;
var l2_count= 0;
var l3_count= 0;
var l4_count= 0;
// keywords im id  或 关键词
const moreData = function(data,deep,keywords){
	data = data.map(item=>{
		
		if(deep==1){
			l2_count+=item.child.length;
			for(var i = 0; i <item.child.length; i++ ){
				if(item.child[i].mate != 0){
					l2_count+= item.child[i].mate.length;
				}
			}
		}
		if(deep==2){
			l3_count+=item.child.length;
			for(var i = 0; i <item.child.length; i++ ){
				if(item.child[i].mate != 0){
					l3_count+= item.child[i].mate.length;
				}
			}
		}
		if(deep==3){
			l4_count+=item.child.length;
			for(var i = 0; i <item.child.length; i++ ){
				if(item.child[i].mate != 0){
					l4_count+= item.child[i].mate.length;
				}
			}
		}
		
		// if(deep==3){
		// 	l3_count+=item.child.length;
		// }
		
		
		if(keywords){
			if(item.people_id==keywords){//关键字高亮
				console.info("item.name 高亮",globe_gldi,item.id);
				globe_gldi = item.id;
			}
			
			if(item.fastim_id==keywords){//自己高亮
				console.info("item.name 高亮1",globe_gldi,item.id);
				globe_gldi = item.id;
			}
		}
		
		item.tree_show = true;
		if(item.press_sign!=3){//默认 如果等于3 不能修改
			item.press_sign=1;
		}else{
			item.press_sign=3;
		}
		item.deep = deep
		if(item.child && item.child.length){
			item.child = moreData(item.child,deep+1,keywords)
		}
		if(deep<4){
			//小于4代
		}else if(deep==4){//等于4代
			if(item.child && item.child.length){
				item.tree_show = true;
				item.press_sign = 2;//默认
			}
		}
		else{
			//大于4代
			if(item.child && item.child.length){
				item.tree_show = false;
				item.press_sign = 2;//默认
			}else{
				item.tree_show = false;
			}
		}
		return item;
	})
	return data
}
const actions ={
	//获取族谱树状图列表
	familyTreeListfun({commit},params){
		return new Promise((resolve,reject)=>{
			familyTreeList({
				...params,
			}).then((res)=>{
				if(res.code==1){
					console.log(res.data)
					l1_count= 0,l2_count= 0,l3_count= 0,l4_count= 0;//记录每一代有多少人
					let treeData = res.data;
					if(params.init_one){
						let userinfo = uni.getStorageSync("userinfo");//im id
						l1_count = treeData.length;
						
						console.info("1111?");
						treeData = moreData(treeData,1,userinfo.id);
					}else{
						console.info("222?");
						l1_count = treeData.length;
						treeData = moreData(treeData,1,params.people_id?params.people_id:null);
						console.log(params.people_id,typeof(params.people_id),'11111')
					}
					
					
					if(globe_gldi){//关键字 和 自己 都高亮
						commit("updateTreedataItem",{val:globe_gldi,key:"item_active"});//修改高亮id
					}
					globe_gldi = "";
					
					// params.keywords
					
					// console.info("---------",JSON.stringify(treeData));
					commit("updateTreedataItem",{val:treeData,key:"treeData"});
					
					console.info(l1_count,l2_count,l3_count,l4_count,"每一代的人数");
					commit("updateTreedataItem",{val:{l1_count,l2_count,l3_count,l4_count},key:"lv_count"});//修改每一代有多少人
					resolve(res);
				}else{
					uni.showToast({
						icon:"none",
						title:res.msg
					})
					reject(false);
				}
			}).catch((err)=>{
				console.log(err)
			})
		})
	},
	// 查询更新某个人的节点  向上加载更多数据
	async ModifyItemDataTop({commit,state},params){
		// console.info("ModifyItemDataTop");
		let res = await familyTreeList({
			...params,
		})
		if(res.code==1){
			let chinddata  = res.data;
			chinddata = forData(chinddata,1)
			let issets = false;
			for(let i =0;i<chinddata.length;i++){
				if(chinddata[i].id==params.family_tree_id){
					chinddata[i] = state.treeData[0];
					issets = true;
					chinddata[i].isshowall=true;//代表全部加载完了
					//到这里 应该是没有更多了~
					// console.info('取到了11');
					break;
				}
				for(let j=0;j<chinddata[i].child.length;j++){
					if(chinddata[i].child[j].id==params.family_tree_id){
						chinddata[i].child[j] = state.treeData[0];												
						issets = true;
						// console.info('取到了22');
						break;
					}
					
					for(let k=0;k<chinddata[i].child[j].child.length;k++){
						if(chinddata[i].child[j].child[k].id==params.family_tree_id){
							chinddata[i].child[j].child[k] = state.treeData[0];
							issets = true;
							// console.info('取到了33');
							break;
						}
					}
				}
			}
			if(issets){
				// commit("updateTreedataItem",{val:chinddata,key:"treeData"});//原来的
				//上面加载了新的数据后 将下面的 第四代 都隐藏
				l1_count= 0,l2_count= 0,l3_count= 0,l4_count= 0;//记录每一代有多少人
				l1_count = chinddata.length;
				let chinddatatwo = moreData(chinddata,1);
				commit("updateTreedataItem",{val:chinddatatwo,key:"treeData"});
				// console.info('赋值成功');
				
				commit("updateTreedataItem",{val:{l1_count,l2_count,l3_count,l4_count},key:"lv_count"});//修改每一代有多少人
				
				console.info(l1_count,l2_count,l3_count,l4_count,"每一代的人数");
			}
		}else{
			uni.showToast({
				icon:"none",
				title:res.msg,
			})
		}
	},
	// 查询更新某个人的节点  向下加载更多数据
	async ModifyItemData({commit,state},params){
		// console.info("params",params);
		let res = await familyTreeList({
			...params,
		})
		if(res.code==1){
			console.log("计算节点数据")
			console.log(res.data)
			let chinddata  = res.data;
			chinddata = forData(chinddata);
			let defaultdata = {};
			for(let i =0;i<chinddata.length;i++){
				if(chinddata[i].id==params.family_tree_id){
					defaultdata = chinddata[i];
					if(chinddata[i].child.length==0){
						// console.info("没有了~");
						chinddata[i].press_sign =3;//没有了
						defaultdata.press_sign = 3;
					}
					// console.info('取到了1',defaultdata);
					break;
				}
				for(let j=0;j<chinddata[i].child.length;j++){
					if(chinddata[i].child[j].id==params.family_tree_id){
						defaultdata = chinddata[i].child[j];
						if(chinddata[i].child[j].child.length==0){
							// console.info("没有了1~");
							chinddata[i].child[j].press_sign =3;//没有了
							defaultdata.press_sign = 3;
						}
						// console.info('取到了2',defaultdata);
						break;
					}
					
					//23-09-06 add
					for(let k=0;k<chinddata[i].child[j].child.length;k++){
						// console.info("chinddata[i].child[j].child[k]",chinddata[i].child[j].child[k]);
						if(chinddata[i].child[j].child[k]){
							if(chinddata[i].child[j].child[k].id==params.family_tree_id){
								defaultdata = chinddata[i].child[j].child[k];
								if(chinddata[i].child[j].child[k].child.length==0){
									// console.info("没有了1~");
									chinddata[i].child[j].child[k].press_sign =3;//没有了
									defaultdata.press_sign = 3;
								}else{
									// defaultdata.press_sign 
								}
								// console.info('取到了3',defaultdata);
								break;
							}
						}else{
							break;
						}
						

					}
					
				}
			}
			// console.info('defaultdata',defaultdata);
			let newdata = recursionFnTow(state.treeData,defaultdata,'edit',state.sel_subscript);
			// commit("updateTreedataItem",{val:newdata,key:"treeData"});//原来的
			
			//2023-09-07 add
			if(defaultdata.child.length){
				let level = params.level;
				let more_item = {};
				if(params.more_item){
					more_item = params.more_item;//传值里面去
					
				}else{
					more_item = state.tap_more_item;// 没有取到取缓存
				}
				// console.info(".........1");
				if(level>=4){//不一定有
					// console.info(".........2");
					newdata = newdata[state.sel_subscript[0]].child;
				}
				console.info('1111aaa1112223');//---->
				newdata = recursionFnThree(newdata,more_item,'edit',true,false,level);//展开
				
			}

			//下面加载了新的数据后 将下面的 第四代 都隐藏
			l1_count= 0,l2_count= 0,l3_count= 0,l4_count= 0;//记录每一代有多少人
			l1_count = newdata.length;
			let chinddatatwo = moreData(newdata,1);
			commit("updateTreedataItem",{val:chinddatatwo,key:"treeData"});//原来的
			
			commit("updateTreedataItem",{val:{l1_count,l2_count,l3_count,l4_count},key:"lv_count"});//修改每一代有多少人
			
			console.info(l1_count,l2_count,l3_count,l4_count,"每一代的人数");
			
			// let newdata = recursionFn(state.treeData,defaultdata,'edit');
			// console.info("newdata",JSON.stringify(newdata));
			// commit("updateTreedataItem",{val:newdata,key:"treeData"});
			return defaultdata;
		}else{
			uni.showToast({
				icon:"none",
				title:res.msg,
			})
		}
	},
	//修改状态 折叠数据 展开某个节点
	async showTree({commit,state},params){
		let more_item = params.more_item;
		let val = params.val;//展开传的是 true  折叠 传的是false
		// console.info("val",val);
		let treeData = state.treeData;
		let level = params.level;
		console.info('1111aaa');
		let newdata = recursionFnThree(treeData,more_item,'edit',val,false,level);//展开
		// console.info("sel_subscript",state.sel_subscript);
		if(level>=4){//不一定有
			newdata = newdata[state.sel_subscript[0]].child;
		}
		commit("updateTreedataItem",{val:newdata,key:"treeData"});
	}
}
const mutations = {
	updateTreedataItem(state, item){
		let {key,val} = item;
		state[key] = val;
	},
}

export default {
	state,
	mutations,
	actions,
}